package com.stone.java8.baselam;

import android.view.View;

import java.util.HashMap;
import java.util.function.Predicate;


/**
 * desc   :
 * author : stone
 * email  : aa86799@163.com
 * time   : 06/03/2017 20 30
 */
public class Lam01 {

    public static void testBaseLambda() {
        //单一方法(无返回值)的 接口 lambda
        Runnable runnable = () -> System.out.println("中华人民共和国");
        runnable.run();

        runnable = () -> {
            System.out.println("run2342");
            System.out.println("run44");
        };
        runnable.run();

        //BinaryOperator接口， add表示一个函数，参数为(x,y)，操作为 相加       暂时，在retro时直接运行报错
//        BinaryOperator<Integer> add = (x, y) -> x + y;

        //与上类似，指定x, y 参数类型
//        BinaryOperator<Long> addExplicit = (Long x, Long y) -> x + y;
    }

    public static View.OnClickListener getOnClickListener() {
        return view -> System.out.println(view.getId());
    }

    public static View.OnClickListener getOnClickListener(String text) {//实际上这里还是 final型的
        return (view) -> System.out.println(view.getId() + text);
    }

    private static class TypeInfer {
        public TypeInfer(HashMap<String, Integer> map) {

        }
    }

    public static void testTypeInfer() {
        new TypeInfer(new HashMap<>());//java 8 自动类型推断，更进了一步; 在java7中还是要传泛型参数的
    }

    public static void testPredicate(int value) {//断言，断定
        Predicate<Integer> greaterThan5 = x -> x > 5;
        boolean flag = greaterThan5.test(value);
        System.out.println("传入的值是否大于5  " + flag);
        System.out.println("传入的值是否小于等于5  " + greaterThan5.negate().test(value));//negate() 取反！

        Predicate<Integer> atMost10 = x -> x <= 10;
        flag = atMost10.and(greaterThan5).test(value); //and &&
        System.out.println("传入的值是否小于等于10且大于5  " + flag);

        flag = atMost10.or(greaterThan5).test(value); //or ||
        System.out.println("传入的值是否小于等于10 或 大于5" + flag);
    }

    public static void testConsumer(int value) {//断言，断定
//        Consumer<Integer> atLeast5 = x -> x > 5;
//        boolean flag = atLeast5.test(value);
//        System.out.println("传入的值是否大于5");
    }
}
